package app.maker.metier.stock.impl;

import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;

import app.maker.entity.Entree;
import app.maker.entity.Entrepot;
import app.maker.entity.Fournisseur;
import app.maker.entity.Produit;
import app.maker.error.EntreeException;
import app.maker.error.ProduitException;
import app.maker.metier.stock.intf.IGestionEntree;
import app.maker.stock.intf.IEntree;
import app.maker.stock.intf.IProduit;

@Stateless(mappedName="gestionEntree")
public class GestionEntree implements IGestionEntree {

	@EJB
	private IEntree iEntree;
	
	@EJB
	private IProduit iProduit;

	public void ajouterEntree(Entree entree, Fournisseur fournisseur, Entrepot entrepot) throws EntreeException, ProduitException {
		//gestionUser.creerUser(entree.getUser());
		
		if((entree.getProduit() == null) || (entree.getTypeEntree() == null) || (entree.getUser() == null)) {
			throw new EntreeException("Certaines informations non renseignées, veuillez corriger vos erreurs !!");
		}
		
		if (entree.getQuantite() <= 0) {
			throw new EntreeException("La quantité renseignée n'est pas acceptable !!");
		}
		
		try {
			Produit produitMAJ = iProduit.getProduit(entree.getProduit().getIdProduit());
			float quantiteMAJ = produitMAJ.getQuantite() + entree.getQuantite();
			produitMAJ.setQuantite(quantiteMAJ);
			iProduit.updateProduit(produitMAJ);
		} catch (ProduitException pe) {
			iProduit.updateProduit(entree.getProduit());
		}
		
		iEntree.updateEntree(entree);
		
	}

	public void annulerEntree(Entree entree) throws EntreeException, ProduitException {
		boolean exist = this.existeEntree(entree);
		
		if (!exist) {
			throw new EntreeException("Entree non trouvée, veuillez vérifier celle ci !!");
		} else {
			
			try {
				Produit produitMAJ = iProduit.getProduit(entree.getProduit().getIdProduit());
				float quantiteMAJ = produitMAJ.getQuantite() - entree.getQuantite();
				produitMAJ.setQuantite(quantiteMAJ);
				iProduit.updateProduit(produitMAJ);
			} catch (ProduitException pe) {
				iProduit.updateProduit(entree.getProduit());
			}
			
			iEntree.deleteEntree(entree);
		}
	}

	public void modifierEntree(Entree entree) throws EntreeException, ProduitException {
		if((entree.getProduit() == null) || (entree.getTypeEntree() == null) || (entree.getUser() == null)) {
			throw new EntreeException("Certaines informations non renseignées, veuillez corriger vos erreurs !!");
		}
		
		if (entree.getQuantite() <= 0) {
			throw new EntreeException("La quantité renseignée n'est pas acceptable !!");
		}
		
		Produit produitMAJ = iProduit.getProduit(entree.getProduit().getIdProduit());
		int idEntreeExistante = entree.getId();
		Entree ancienneEntree = iEntree.getEntree(idEntreeExistante);
		produitMAJ.setQuantite(produitMAJ.getQuantite() - ancienneEntree.getQuantite() + entree.getQuantite());
		
		iProduit.updateProduit(produitMAJ);
		
		iEntree.updateEntree(entree);

	}

	public boolean existeEntree(Entree entree) throws EntreeException {
		boolean existe = false;
		List<Entree> listeEntrees = iEntree.getAllEntree();
		
		for (Entree e : listeEntrees) {
			if (e.getId() == entree.getId()) {
				existe = true;
			}
		}
		
		return existe;
	}

	public List<Entree> getAllEntrees() throws EntreeException {
		return iEntree.getAllEntree();
	}

}
